#ifndef __BASE_ENTITY_CHOOSER_DIALOG_HPP__
#define __BASE_ENTITY_CHOOSER_DIALOG_HPP__

////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "SmegEditor_gui.h"

#include <vector>

class BaseEntityHandler;

////////////////////////////////////////////////////////////
/// BaseEntityChooserDialog is a dialog to create ConvexHull
////////////////////////////////////////////////////////////
class BaseEntityChooserDialog : public BaseEntityChooserDialogGUI
{
    public:
        ////////////////////////////////////////////////////////////
        /// Default Constructor
        ////////////////////////////////////////////////////////////
                            BaseEntityChooserDialog( wxWindow* _pParent );

        ////////////////////////////////////////////////////////////
        /// Construct the BaseEntityChooserDialog
        ///
        /// \param _pParent : Parent of the frame
        /// \param _HandlersToAvoid : Handlers to avoid to display
        ///
        ////////////////////////////////////////////////////////////
                            BaseEntityChooserDialog( wxWindow* _pParent, const wxArrayString& _HandlersToAvoid );

        /*********************** Accessors ************************/
        BaseEntityHandler*  GetChoosenEntityHandler() const;

    protected:
        ////////////////////////////////////////////////////////////
        /// Setup the list
        ///
        /// \param _HandlersToAvoid : Handlers to avoid to display
        ///
        ////////////////////////////////////////////////////////////
        void                Setup( const wxArrayString& _HandlersToAvoid );

        ////////////////////////////////////////////////////////////
		/// Event handlers
        ///
        ////////////////////////////////////////////////////////////
        virtual void        OnValidateBaseEntity( wxCommandEvent& event );
        virtual void        OnCancelBaseEntity( wxCommandEvent& event );
        virtual void        OnChooseBaseEntity( wxCommandEvent& event );

        /******************* Protected members ********************/
        std::vector<BaseEntityHandler*> m_BaseEntityHandlersVec;
        BaseEntityHandler*              m_pChosenEntityHandler;
};

/************************** Inline ************************/
inline BaseEntityHandler* BaseEntityChooserDialog::GetChoosenEntityHandler() const {
    return m_pChosenEntityHandler;
}

#endif // __BASE_ENTITY_CHOOSER_DIALOG_HPP__
